#ifndef VISTAESCENARIO_H_
#define VISTAESCENARIO_H_

#define ANCHO_FICHA 50
#define ALTO_FICHA 50
#define SEPARADOR_FICHAS 3
#define MAX_CANTIDAD_COLUMNAS 16
#define MAX_CANTIDAD_FILAS 16

#include <gtkmm/drawingarea.h>
#include <sigc++/sigc++.h>
#include <list>
#include <string>
#include "VistaFichaTablero.h"
#include "Mutex.h"
#include "Constantes.h"
#include "Log.h"

class Juego;

class VistaEscenario : public Gtk::DrawingArea {
    friend class Juego;

    bool cambiando;

    Mutex protectorFichas;

    typedef sigc::signal<void, int, int> type_signal_something;

    int filas, columnas;

    std::list<VistaFichaTablero *> vistaTablero;

    int ajustarCoordenada(float unaCoordenada);

    Glib::RefPtr<Gdk::Pixbuf>  backgroundImage;

    void dibujarFondo(const Cairo::RefPtr<Cairo::Context> &cr);

    void dibujarGrilla(const Cairo::RefPtr<Cairo::Context> &cr);

    void dibujarFichas(const Cairo::RefPtr<Cairo::Context> &cr);

    virtual bool on_draw(const Cairo::RefPtr<Cairo::Context> &cr);

    void ini();

    type_signal_something m_signal_something;

  public:
    VistaFichaTablero *vistaFichas[MAX_CANTIDAD_FILAS][MAX_CANTIDAD_COLUMNAS];
    int fichas;

    bool on_timeout();

    VistaEscenario();

    virtual ~VistaEscenario();

    bool on_button_press_event(GdkEventButton *event);

    type_signal_something signal_something();

    void on_button_clicked();

    void agregarFicha(VistaFichaTablero *vista);

    void establecerDimensiones(int filas, int columnas);

    void setImagenFondo(std::string path);

    void quitarFichas();

    void notificarCambioTablero(bool cambio);
};
#endif
